package org.study.shell;

import java.util.ArrayList;
import java.util.List;

public class ShellFile {
    /**
     * 存在则删除，再创建
     *
     * @param path 路径
     */
    public static List<String> createPath(String path) {
        List<String> commands = new ArrayList<String>();
        commands.add("if [ -e " + path + " ]; then");
        commands.add("   rm -rf " + path);
        commands.add("   echo \"" + path + ",已删除\"");
        commands.add("fi");
        commands.add("sudo mkdir -p " + path);
        commands.add("echo \"" + path + ",创建目录成功！\"");
        return commands;
    }

    public static List<String> lnExistDelete(String lnPath, String path) {
        List<String> commands = new ArrayList<String>();
        commands.add("if [ -e " + lnPath + " ]; then");
        commands.add("    echo \"" + lnPath + ",已存在则删除！\"");
        commands.add("    unlink " + lnPath);
        commands.add("else");
        commands.add("    ln -s " + path + " " + lnPath);
        commands.add("    ls -l " + lnPath);
        commands.add("fi");
        return commands;
    }

    /**
     * 路径存在则跳过
     *
     * @param path 路径
     */
    public static List<String> createPathExist(String path) {
        List<String> commands = new ArrayList<String>();
        commands.add("if [ -e " + path + " ]; then");
        commands.add("    echo \"" + path + ",已存在\"");
        commands.add("else");
        commands.add("    sudo mkdir -p " + path);
        commands.add("    echo \"" + path + ",创建目录成功！\"");
        commands.add("fi");
        return commands;
    }

    /**
     * 修改文件的用户组和用户。
     *
     * @param user  用户
     * @param group 用户组
     * @param path  路径
     * @return
     */
    public static String chownPath(String user, String group, String path) {
        return "sudo chown -R " + group + ":" + user + " " + path;
    }

    /**
     * 替换文件中的内容
     * 1. sed -i 's/原字符串/新字符串/g' 文件名  #替换文件中所有匹配的字符串（原地修改）
     * 2. sed -i '/目标字符串/i 第一行内容\n第二行内容' 文件，在目标字符串前插入对应数据
     * 分割符/可以根据具体进行替换其他内容如：#等
     *
     * @param replace  替换内容
     * @param fileName 文件名称
     */
    public static String replaceContent(String replace, String fileName) {
        return "sudo sed -i \"" + replace + "\" " + fileName;
    }

    /**
     * 删除文件内容
     * 1. sed -i 'Nd' 文件名   #删除第N行
     * 2. sed -i '/关键词/d' 文件名  #用sed删除包含关键词的行
     * 3. sed -i '/^$/d' file.txt #示例：删除所有空行
     *
     * @param replace  执行内容
     * @param fileName 文件名称
     */
    public static String deleteContent(String replace, String fileName) {
        return "sudo sed -i '" + replace + "' " + fileName;
    }

    /**
     * 仅显示行号, 示例：  sed -n "/<\/configuration>/=" test_file.xml
     * @param findText  需要查找的文字
     * @param fileName  需要查找的文件名称
     */
    public static String sedFindLineNum(String findText, String fileName){
        return "`sed -n \""+findText+"\" "+fileName+"`";
    }

    /**
     * 创建软链接
     *
     * @param srcPath    文件地址
     * @param sourcePath 软链接地址
     */
    public static String lnFile(String srcPath, String sourcePath) {
        return "sudo ln -s " + srcPath + " " + sourcePath;
    }

    /**
     * 查找路径下制定名称的 文件或目录是否存在，不存在则退出
     *
     * @param path    查找路径
     * @param name    查找文件或目录的名称
     * @param varName 变量名称，用户后续使用
     */
    public static List<String> findByName(String path, String name, String varName) {
        List<String> commands = new ArrayList<String>();
        commands.add(varName + "=`find " + path + " -name " + name + "*`");
        commands.add("if [[ $" + varName + " == *\"" + name + "\"* ]]; then");
        commands.add("    echo \"" + varName + " = $" + varName + "\"");
        commands.add("else");
        commands.add("    echo \"" + varName + "，值为空,退出安装\"");
        commands.add("    exit 1");
        commands.add("fi");
        return commands;
    }

}
